﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

// 设计一个系统，用于验证用户输入的数据，支持不同的验证规则。
// 任务:
// 定义一个 Predicate<string> 委托，表示接受一个 string 并返回 bool，用于验证规则。
// 创建一个 Validator 类，它具有一个方法 Validate，接受一个 string 和多个 Predicate<string> 委托进行验证。
// 实现几个验证规则，如检查非空、检查长度等，并用它们验证用户输入。
namespace CS_BEGINNER_TO_PROFICIENT.STD.DelegatedSTD
{
    class DelegatedSTDP13
    {
        public static void Execute()
        {
            Predicate<string> IsNotNullOrEmpty = input => !string.IsNullOrEmpty(input);
            Predicate<string> JudgeLength = input => input.Trim().Length > 0;

            Console.WriteLine($"Res: " + Validator.Validate("Hello World", IsNotNullOrEmpty, JudgeLength));
            Console.WriteLine($"Res: " + Validator.Validate("   ", IsNotNullOrEmpty, JudgeLength));
        }
    }

    public class Validator
    {   
        public static bool Validate(string input, params Predicate<string>[] predicates)
        {
            foreach (var i in predicates)
            {
                if (!(i(input)))
                {
                    return false;
                }
            }
            return true;
        }
    }
}
